package com.duzhuo.springsecurity.config;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * 签发/生成token
 * issuer 签发人
 * subject 代表这个JWT的主体，即他的所有人，一般是用户ID
 * claims 储存在jwt里的信息(键值对)，一般是放些用户的权限/角色信息
 * ttlMillis 有效时间(毫秒)
 * secret 密钥
 exp (expiration time)：过期时间
 aud (audience)：受众
 nbf (Not Before)：生效时间
 iat (Issued At)：签发时间
 jti (JWT ID)：编号
 */
@Component
public class TokenManager {
    //编码秘钥
    private  String tokenSignKey = "XAL123456";

    public static final String TOKEN_HEADER = "Authorization";
    public static final String TOKEN_PREFIX = "Bearer ";
    //发行人
    private static final String ISS = "XUALEI";
    // 角色的key
    public static final String ROLE_CLAIMS = "rol";

    //token有效时长
    private long tokenEcpiration = 24*60*60*1000;//24小时
//    private long tokenEcpiration = 60*1000;//60s


    //1 使用jwt根据用户名生成token
    public String createToken(String username, Map<String,Object> claims){
        String token = Jwts.builder()
                .setClaims(claims)//权限
                .setSubject(username)//用户名
                .setExpiration(new Date(System.currentTimeMillis()+tokenEcpiration))
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .setIssuer(ISS)
                .compressWith(CompressionCodecs.GZIP).compact();
        return token;
    }
    //2 根据token字符串得到用户信息
    public Claims getUserInfoFromToken(String token) {
        Claims claims = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody();
        return claims;
    }
    //3 删除token
    public void removeToken(String token) { }




}



